using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using BerkoRules.Objects;
using BerkoRules.Mappers;
using Microsoft.VisualBasic.CompilerServices;
using BerkoRules.Entities;

namespace Berko
{
    public partial class frmModelos : Form
    {
        private bool _principal;
        private MarcasObject _ma;
        private MarcasObjectList _marcas;
        private Modelos _mo;
        private ModelosList _modelos;

        public bool Desde_Principal
        {
            get
            {
                return this._principal;
            }
            set
            {
                this._principal = value;
            }
        }


        public frmModelos()
        {
            InitializeComponent();
            this._modelos = null;
            this._marcas = null;
            this._ma = null;
            this._mo = null;
            this._cargaTotal = false;
            this._principal = false;

        }

        private void cboMarcas_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (this._cargaTotal && (this.cboMarcas.SelectedIndex > -1))
            {
                this.Traer_Modelos();
            }
        }

        private void cmdEliminar1_Click(object sender, EventArgs e)
        {
            if ((MessageBox.Show("\x00bfDesea eliminar la marca seleccionada?", "Eliminar", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) && this.Eliminar1())
            {
                if (this._principal)
                {
                    this.Traer_Marcas();
                    this.txtMarca.Text = string.Empty;
                    this.txtMarca.Focus();
                }
                else
                {
                    this.DialogResult = DialogResult.OK;
                }
            }
        }

        private void cmdEliminar2_Click(object sender, EventArgs e)
        {
            if ((MessageBox.Show("\x00bfDesea eliminar el modelo seleccionado?", "Eliminar", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) && this.Eliminar2())
            {
                if (this._principal)
                {
                    this.Traer_Modelos();
                    this.txtModelo.Text = string.Empty;
                    this.txtModelo.Focus();
                }
                else
                {
                    this.DialogResult = DialogResult.OK;
                }
            }
        }

        private void cmdModif1_Click(object sender, EventArgs e)
        {
            if (this.Validar_Marca() && this.Modificar1())
            {
                if (this._principal)
                {
                    this.Traer_Marcas();
                    this.txtMarca.Text = string.Empty;
                    this.txtMarca.Focus();
                }
                else
                {
                    this.DialogResult = DialogResult.OK;
                }
            }
        }

        private void cmdNuevo1_Click(object sender, EventArgs e)
        {
            if (this.Validar_Marca() && this.Nuevo1())
            {
                if (this._principal)
                {
                    this.Traer_Marcas();
                    this.txtMarca.Text = string.Empty;
                    this.txtMarca.Focus();
                }
                else
                {
                    this.DialogResult = DialogResult.OK;
                }
            }
        }

        private void cmdNuevo2_Click(object sender, EventArgs e)
        {
            if (this.Validar_Modelo() && this.Nuevo2())
            {
                if (this._principal)
                {
                    this.Traer_Modelos();
                    this.txtModelo.Text = string.Empty;
                    this.txtModelo.Focus();
                }
                else
                {
                    this.DialogResult = DialogResult.OK;
                }
            }
        }

        private void cmdSalir_Click(object sender, EventArgs e)
        {
            this.Close();
        }
        private bool Eliminar1()
        {
            try
            {
                MarcasMapper.Instance().Delete(this._marcas[this.cboMarcas.SelectedIndex].mar_ID);
            }
            catch (Exception exception1)
            {
                ProjectData.SetProjectError(exception1);
                Exception exception = exception1;
                MessageBox.Show("No se pudo eliminar la marca seleccionada. Verifique que no est\x00e9 siendo utilizado", "Eliminar", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                bool flag = false;
                ProjectData.ClearProjectError();
                return flag;
            }
            return true;
        }

        private bool Eliminar2()
        {
            try
            {
                ModelosMapper.Instance().Delete(this._modelos[this.cboModelos.SelectedIndex].mod_ID);
            }
            catch (Exception exception1)
            {
                ProjectData.SetProjectError(exception1);
                Exception exception = exception1;
                MessageBox.Show("No se pudo eliminar el modelo seleccionado. Verifique que no est\x00e9 siendo utilizado", "Eliminar", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                bool flag = false;
                ProjectData.ClearProjectError();
                return flag;
                ProjectData.ClearProjectError();
            }
            return true;
        }

        private void frmModelos_Load(object sender, EventArgs e)
        {
            if ((this.Traer_Marcas() && (this._marcas != null)) && (this._marcas.Count > 0))
            {
                this.cboMarcas.SelectedIndex = 0;
                this.txtMarca.Text = this.cboMarcas.Text;
                this.cmdModif1.Enabled = true;
                this.cmdEliminar1.Enabled = true;
            }
            this._cargaTotal = true;
            this.txtMarca.Focus();
        }

        private void mdModif2_Click(object sender, EventArgs e)
        {
            if (this.Validar_Modelo() && this.Modificar2())
            {
                if (this._principal)
                {
                    this.Traer_Modelos();
                    this.txtModelo.Text = string.Empty;
                    this.txtModelo.Focus();
                }
                else
                {
                    this.DialogResult = DialogResult.OK;
                }
            }
        }

        private bool Modificar1()
        {
            this._marcas[this.cboMarcas.SelectedIndex].mar_Nombre = this.txtMarca.Text.Trim();
            try
            {
                MarcasMapper.Instance().Save(this._marcas[this.cboMarcas.SelectedIndex]);
            }
            catch (Exception exception1)
            {
                ProjectData.SetProjectError(exception1);
                Exception exception = exception1;
                MessageBox.Show("No se pudo actualizar la marca seleccionada. Reintente por favor...", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                bool flag = false;
                ProjectData.ClearProjectError();
                return flag;
                ProjectData.ClearProjectError();
            }
            return true;
        }

        private bool Modificar2()
        {
            this._modelos[this.cboModelos.SelectedIndex].mod_Nombre = this.txtModelo.Text.Trim();
            this._modelos[this.cboModelos.SelectedIndex].mar_ID = (short)(this.cboMarcas.SelectedValue);
            try
            {
                ModelosMapper.Instance().Save(this._modelos[this.cboModelos.SelectedIndex]);
            }
            catch (Exception exception1)
            {
                ProjectData.SetProjectError(exception1);
                Exception exception = exception1;
                MessageBox.Show("No se pudo actualizar el modelo seleccionado. Reintente por favor...", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                bool flag = false;
                ProjectData.ClearProjectError();
                return flag;
                ProjectData.ClearProjectError();
            }
            return true;
        }

        private bool Nuevo1()
        {
            MarcasObject row = new MarcasObject();
            row.mar_Nombre = this.txtMarca.Text.Trim();
            try
            {
                MarcasMapper.Instance().Insert(row);
            }
            catch (Exception exception1)
            {
                ProjectData.SetProjectError(exception1);
                Exception exception = exception1;
                MessageBox.Show("No se pudo guardar la marca. Reintente por favor...", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                bool flag = false;
                ProjectData.ClearProjectError();
                return flag;
                ProjectData.ClearProjectError();
            }
            return true;
        }

        private bool Nuevo2()
        {
            Modelos row = new Modelos();
            row.mod_Nombre = this.txtModelo.Text.Trim();
            row.mar_ID = Conversions.ToShort(this.cboMarcas.SelectedValue);
            try
            {
                ModelosMapper.Instance().Insert(row);
            }
            catch (Exception exception1)
            {
                ProjectData.SetProjectError(exception1);
                Exception exception = exception1;
                MessageBox.Show("No se pudo guardar el modelo. Reintente por favor...", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                bool flag = false;
                ProjectData.ClearProjectError();
                return flag;
                ProjectData.ClearProjectError();
            }
            return true;
        }

        private bool Traer_Marcas()
        {
            try
            {
                this._marcas = MarcasMapper.Instance().GetAll();
            }
            catch (Exception exception1)
            {
                ProjectData.SetProjectError(exception1);
                Exception exception = exception1;
                MessageBox.Show("No se pudieron traer las marcas. Reintente por favor...", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                bool flag = false;
                ProjectData.ClearProjectError();
                return flag;
                ProjectData.ClearProjectError();
            }
            this.cboMarcas.DataSource = this._marcas;
            this.cboMarcas.DisplayMember = "mar_Nombre";
            this.cboMarcas.ValueMember = "mar_ID";
            return true;
        }

        private bool Traer_Modelos()
        {
            try
            {
                this._modelos = ModelosMapper.Instance().GetByMarcas((Int16)(this.cboMarcas.SelectedValue));
            }
            catch (Exception exception1)
            {
                ProjectData.SetProjectError(exception1);
                Exception exception = exception1;
                MessageBox.Show("No se pudieron traer los modelos. Reintente por favor...", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                bool flag = false;
                ProjectData.ClearProjectError();
                return flag;
                ProjectData.ClearProjectError();
            }
            this.cboModelos.DataSource = this._modelos;
            this.cboModelos.DisplayMember = "mod_Nombre";
            this.cboModelos.ValueMember = "mod_ID";
            return true;
        }

        private bool Validar_Marca()
        {
            if (this.txtMarca.Text.Trim() == string.Empty)
            {
                MessageBox.Show("Debe ingresar un valor v\x00e1lido", "Campo vac\x00edo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                this.txtMarca.Focus();
                return false;
            }
            return true;
        }

        private bool Validar_Modelo()
        {
            if (this.txtModelo.Text.Trim() == string.Empty)
            {
                MessageBox.Show("Debe ingresar un valor v\x00e1lido", "Campo vac\x00edo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                this.txtModelo.Focus();
                return false;
            }
            if (this.cboMarcas.SelectedIndex == -1)
            {
                MessageBox.Show("Debe seleccionar una marca", "Campo vac\x00edo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                this.cboMarcas.Focus();
                return false;
            }
            return true;
        }

    }
}